﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FinanSoft.BusinessLayer;
using FinanSoft.Utilities;

namespace FinanSoft.PresentacionSociosNegocios
{
    public partial class frmCrearCondicionPago : Form
    {
        public frmCrearCondicionPago()
        {
            InitializeComponent();
            fillPayConditions();
        }

        /// <summary>
        /// Evento: crea una nueva condición de pago
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnIngresar_Click(object sender, EventArgs e)
        {
            createPayCondition();
        }

        /// <summary>
        /// Método que se encarga de revisar que los campos no estén vacíos
        /// </summary>
        /// <returns></returns>
        private bool validateFields()
        {
            if (txtName.Text.Trim().Length == 0)
            {
                MessageBox.Show(MessageConstants.MISSING_FIELDS, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            else
                return true;
        }

        /// <summary>
        /// Método que se encarga de llamar a crear una nueva condición de pago
        /// </summary>
        private void createPayCondition()
        {
            if (validateFields())
            {
                string condName = txtName.Text;
                int days = Convert.ToInt32(stepDays.Value);
                AuxiliaryAccountManager.GetInstance().CreatePayCondition(condName, days);
                if (AuxiliaryAccountManager.GetInstance().IsError)
                    MessageBox.Show(AuxiliaryAccountManager.GetInstance().ErrorMessage, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    MessageBox.Show(MessageConstants.PAY_COND_INSERTED, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    cmbCondName.Items.Clear();
                    fillPayConditions();
                }
            }
        }

        /// <summary>
        /// Método que se encarga de llenar el combo de las condiciones de pago
        /// </summary>
        private void fillPayConditions()
        {
            // Aqui se  hace la llamada a la función
            List<String> addedConditions = getPayConditions();

            for (int condIndex = 0; condIndex < addedConditions.Count; condIndex++)
                cmbCondName.Items.Add(addedConditions[condIndex]);
            if(cmbCondName.Items.Count > 0)
                cmbCondName.SelectedIndex = 0;
        }

        /// <summary>
        /// Método que se encarga de solicitar la lista de condiciones de pago
        /// </summary>
        private List<String> getPayConditions()
        {
            // aqui tengo que llamar la
            return AuxiliaryAccountManager.GetInstance().GetConditionsList();
        }

        /// <summary>
        /// Evento que cierra la ventana
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        /// <summary>
        /// Evento que se encarga de la eliminación de una condición de pago
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            if (cmbCondName.Items.Count > 0)
            {
                String cond = cmbCondName.SelectedItem.ToString();
                AuxiliaryAccountManager.GetInstance().DeletePayCondition(cond);
                if (AuxiliaryAccountManager.GetInstance().IsError)
                    MessageBox.Show(AuxiliaryAccountManager.GetInstance().ErrorMessage, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    MessageBox.Show(MessageConstants.PAY_COND_DELETED, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    cmbCondName.Items.Clear();
                    fillPayConditions();
                }
            }
            else
                MessageBox.Show(MessageConstants.NO_COND_TO_DELETE, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
}
